package cn.tedu.micro.demo.all.service;

import cn.tedu.micro.demo.all.mapper.CartMapper;
import cn.tedu.micro.demo.common.pojo.po.CartPO;
import cn.tedu.micro.demo.common.pojo.vo.CartVO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

@Service
@Slf4j
public class CartServiceImpl implements CartService{
    @Autowired
    private CartMapper cartMapper;

    @Override
    public void saveCart(Integer userId, String productCode, Integer count) {
        log.info("当前注入的cartMapper:{}",cartMapper.getClass().getName());
        //1.将入参组织成一个CartPO
        CartPO cartPO=new CartPO(null,userId,productCode,count);
        //2.需要新增sql insert into cart_tbl(user_id,product_code,count) values (#{userId})
        cartMapper.insert(cartPO);
        //TODO CRUD 需要起码了解一套API
    }

    @Override
    public List<CartVO> listMyCart(Integer userId) {
        //使用BaseMapper的现成方法 必须前提是 知道sql怎么写
        //select id,user_id,product_code,count from cart_tbl
        //where user_id=#{userId} and create_time<2025-4-29
        //select查询 主要是告诉持久层mapper where条件
        QueryWrapper<CartPO> whereWrapper=new QueryWrapper<>();
        whereWrapper.eq("user_id",userId);
        //whereWrapper.lt("create_time","2025-4-29");
        //使用这个条件 搜索的是list selectList 搜索的是一个 selectOne
        List<CartPO> pos = cartMapper.selectList(whereWrapper);
        //转化pos成vos; 能否查询出来数据 pos是空
        if (pos!=null&&pos.size()>0){
            //第一种方法 遍历pos 转化vos
            List<CartVO> vos=new ArrayList();
            for (CartPO cartPO : pos) {
                CartVO cartVO=new CartVO();
                BeanUtils.copyProperties(cartPO,cartVO);
                vos.add(cartVO);
            }
            //第二种 使用list 的stream()方法 filter foreach sort
            /*List<CartVO> vos = pos.stream().map(cartPO -> {
                //入参是pos中每个元素 出参映射封装结果
                CartVO cartVO = new CartVO();
                BeanUtils.copyProperties(cartPO, cartVO);
                return cartVO;
            }).collect(Collectors.toList());*/
            return vos;
        }
        return null;
    }
}
